﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DTO_MechSys;
using System.Data.SqlClient;

namespace DAL_MechSys
{
    public class DALFornecedor : DALBase
    {

        private DTOFornecedor CriarFornecedor(SqlDataReader sqlDataReader)
        {
            try
            {
                DTOFornecedor dtoFornecedor = new DTOFornecedor();

                if (!string.IsNullOrEmpty(sqlDataReader["FornecedorID"].ToString()))
                {
                    dtoFornecedor.FornecedorID = (int)sqlDataReader["FornecedorID"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Razao"].ToString()))
                {
                    dtoFornecedor.Razao = (string)sqlDataReader["Razao"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["CNPJ"].ToString()))
                {
                    dtoFornecedor.CNPJ = (string)sqlDataReader["CNPJ"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Telefone"].ToString()))
                {
                    dtoFornecedor.Telefone = (string)sqlDataReader["Telefone"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Telefone2"].ToString()))
                {
                    dtoFornecedor.Telefone2 = (string)sqlDataReader["Telefone2"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Email"].ToString()))
                {
                    dtoFornecedor.Email = (string)sqlDataReader["Email"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Site"].ToString()))
                {
                    dtoFornecedor.Site = sqlDataReader["Site"].ToString();
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Representante"].ToString()))
                {
                    dtoFornecedor.Representante = (string)sqlDataReader["Representante"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["TelefoneRepr"].ToString()))
                {
                    dtoFornecedor.RepresentanteTelefone = (string)sqlDataReader["TelefoneRepr"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["CelularRepr"].ToString()))
                {
                    dtoFornecedor.RepresentanteCelular = (string)sqlDataReader["CelularRepr"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["EmailRepr"].ToString()))
                {
                    dtoFornecedor.RepresentanteEmail = (string)sqlDataReader["EmailRepr"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["EnderecoID"].ToString()))
                {
                    dtoFornecedor.EnderecoID = (int)sqlDataReader["EnderecoID"];
                }

                return dtoFornecedor;
            }
            catch (Exception)
            {
                throw;
            }
        }

        public void Inserir(DTOFornecedor dtoFornecedor)
        {
            try
            {
                string storedProssidere = "sp_InserirFornecedor";
                SqlParameter[] parameters =
                
                {     
                   new SqlParameter("@razao", dtoFornecedor.Razao),
                   new SqlParameter("@cnpj", dtoFornecedor.CNPJ),
                   new SqlParameter("@telefone", dtoFornecedor.Telefone),
                   new SqlParameter("@telefone2", dtoFornecedor.Telefone2),
                   new SqlParameter("@email", dtoFornecedor.Email),                       
                   new SqlParameter("@site", dtoFornecedor.Site),
                   new SqlParameter("@representante", dtoFornecedor.Representante),
                   new SqlParameter("@representanteTel", dtoFornecedor.RepresentanteTelefone),
                   new SqlParameter("@representanteCel", dtoFornecedor.RepresentanteCelular),
                   new SqlParameter("@representanteEmail", dtoFornecedor.RepresentanteEmail),
                   new SqlParameter("@enderecoID", dtoFornecedor.EnderecoID),
                   new SqlParameter("@dataRegistro", DateTime.Now)
                };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {
                throw;
            }
        }
        public DTOFornecedor BuscarRazaoPorFornecedorID(int fornecedorID)
        {
            DTOFornecedor dtoFornecedor = new DTOFornecedor();
            try
            {
                string storedProssidere = "sp_BuscarDescricaoPorFornecedorID";
                SqlParameter[] parameters =
                
                {     
                   new SqlParameter("@fornecedorID", fornecedorID)
                };
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    while (sqlDataReader.Read())
                    {
                        dtoFornecedor = CriarFornecedor(sqlDataReader);

                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return dtoFornecedor;
        }

        public List<DTOFornecedor> BuscarFornecedoresCadastrados()
        {
            List<DTOFornecedor> lstFornecedores = new List<DTOFornecedor>();

            try
            {
                string storedProssidere = "sp_BuscarFornecedoresCadastrados";
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere))
                {
                    while (sqlDataReader.Read())
                    {

                        DTOFornecedor dtoFornecedor = CriarFornecedor(sqlDataReader);

                        lstFornecedores.Add(dtoFornecedor);

                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return lstFornecedores;
        }

        public void Atualizar(DTOFornecedor dtoFornecedor)
        {
            try
            {
                string storedProssidere = "sp_AtualizarFornecedor";
                SqlParameter[] parameters =

                        {                    
                           new SqlParameter("@fornecedorID", dtoFornecedor.FornecedorID),
                           new SqlParameter("@razao", dtoFornecedor.Razao),
                   new SqlParameter("@cnpj", dtoFornecedor.CNPJ),
                   new SqlParameter("@telefone", dtoFornecedor.Telefone),
                   new SqlParameter("@telefone2", dtoFornecedor.Telefone2),
                   new SqlParameter("@email", dtoFornecedor.Email),                       
                   new SqlParameter("@site", dtoFornecedor.Site),
                   new SqlParameter("@representante", dtoFornecedor.Representante),
                   new SqlParameter("@representanteTel", dtoFornecedor.RepresentanteTelefone),
                   new SqlParameter("@representanteCel", dtoFornecedor.RepresentanteCelular),
                   new SqlParameter("@representanteEmail", dtoFornecedor.RepresentanteEmail),
                   new SqlParameter("@enderecoID", dtoFornecedor.EnderecoID),
                   new SqlParameter("@dataRegistro", DateTime.Now)     
                        };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {
                throw;
            }
        }

        public void Excluir(int fornecedorID)
        {
            try
            {
                string storedProssidere = "sp_ExcluirFornecedor";
                SqlParameter[] parameters =

                        {                    
                           new SqlParameter("@fornecedorID", fornecedorID)                                    
                        };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {
                throw;
            }
        }

        public bool VerificaSeFornecedorIDExiste(int fornecedorID)
        {
            bool Existe = false;

            try
            {
                string storedProssidere = "sp_VerificaSeFornecedorIDExiste";

                SqlParameter[] parameters =
            {
                new SqlParameter("@fornecedorID", fornecedorID),                            
            };

                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    if (sqlDataReader.Read())
                    {
                        int NumReg = (int)sqlDataReader["NumeroRegistros"];
                        if (NumReg > 0)
                        {
                            Existe = true;
                        }

                    }
                }
                return Existe;

            }
            catch (Exception)
            {
                throw;
            }

        }

        public List<DTOFornecedor> PesquisarFornecedores(string texto)
        {
            List<DTOFornecedor> lstFornecedores = new List<DTOFornecedor>();

            try
            {
                string storedProssidere = "sp_BuscarFornecedoresPesquisa";

                SqlParameter[] parameters =                
                { 
                   new SqlParameter("@string", texto)
                  
                };
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    while (sqlDataReader.Read())
                    {
                        DTOFornecedor dtoFornecedor = CriarFornecedor(sqlDataReader);

                        lstFornecedores.Add(dtoFornecedor);
                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return lstFornecedores;
        }
    }
}
